package persistence;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import model.*;
public class PersistenciaImagenHotel {
	private static PersistenciaImagenHotel instancia;
	
	public static PersistenciaImagenHotel getInstancia()
	{
		if (instancia== null)
			instancia =new PersistenciaImagenHotel();
		return instancia;
	}
	
	public PersistenciaImagenHotel() {
		// TODO Auto-generated constructor stub
	}
	
	public ImagenHotel getImagenHotel(int id_hotel)
	{
		ImagenHotel img = null; 
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		try
		{
			String senten = "SELECT id, nombre FROM ImagenHotel where id_hotel = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1,id_hotel);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{						
				img = new ImagenHotel(
						result.getInt("id")
						, result.getString("nombre")
						);								
			}
			
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			return img;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al consultar ImagenHotel: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
	      return img;
	}
	
	public ArrayList<ImagenHotel> getImagenes(int id_hotel)
	{
		ArrayList<ImagenHotel> imagenes = new ArrayList<ImagenHotel>();
		ImagenHotel img = null; 
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		
		try
		{
			String senten = "SELECT id, nombre from ImagenHotel "
					+ "WHERE id_hotel = ?" ;
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1,id_hotel);
			ResultSet result = ps.executeQuery();
			while (result.next())
			{						
				img = new ImagenHotel(
						result.getInt("id")
						, result.getString("nombre")
						);
				imagenes.add(img);
			}
			
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			return imagenes;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al consultar Imagnes: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
	      return imagenes;
	}	
	
	public ImagenHotel insertImagenHotel(ImagenHotel img, int id_hotel) //
	{
		int newId=0;
		Connection con = PoolConexiones.getPoolConexiones().getConnection();
		String senten = null;
		try
		{					
			senten = "INSERT INTO ImagenHotel (id_hotel, nombre) "
					+ "VALUES (?,?)";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten, Statement.RETURN_GENERATED_KEYS);
			ps.setInt(1, id_hotel);
			ps.setString(2, img.getNombre());
			ps.execute();
			ResultSet  generatedKeys = ps.getGeneratedKeys();
			if(generatedKeys.next())
			{	
				newId = generatedKeys.getInt(1);
			}
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
			img.setId(newId);
			return img;
		}
	      catch( SQLException e ) 
	      {
				System.out.println("Error al Insertar ImagenHotel: " + e.getMessage());
				e.printStackTrace();
				PoolConexiones.getPoolConexiones().realeaseConnection(con);
	      }
		return img;
	}
	
	public void eliminarImagenesHotel(int id_hotel) //hecho
	{	      
		Connection con = PoolConexiones.getPoolConexiones().getConnection();				
		try
		{
			String senten = "DELETE FROM ImagenHotel "
					+ "WHERE id_hotel = ?";
			PreparedStatement ps = null;
			ps = con.prepareStatement(senten);
			ps.setInt(1,id_hotel);	
			ps.executeUpdate();
			con.commit();
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
		}
		catch( SQLException e ) 
		{
			System.out.println("Error al eliminar ImagenesHotel: " + e.getMessage());
			e.printStackTrace();
			try{
				if(con!=null)
		            con.rollback();
			}catch( SQLException e2){
				e2.printStackTrace();
			}
			PoolConexiones.getPoolConexiones().realeaseConnection(con);
	    }
	}	
}
